class QueueDemo(object):
    def __init__(self):
        self.__items = []

    def is_empty(self):
        """队列判空"""
        return self.__items == []

    def size(self):
        """返回队列的大小"""
        return len(self.__items)

    def enqueue(self, item):
        """往队列里添加元素"""
        self.__items.insert(0, item)

    def dequeue(self):
        """从队列里删除元素"""
        return self.__items.pop()

    def add_front(self, item):
        """队头添加元素"""
        self.__items.insert(0, item)

    def add_rear(self, item):
        """队尾添加元素"""
        self.__items.append(item)

    def remove_front(self):
        """队头删除元素"""
        return self.__items.pop(0)

    def remove_rear(self):
        """队尾删除元素"""
        return self.__items.pop()

    def _test_queue(self):
        """
        qd = QueueDemo()
        qd._test_queue()
        """
        # QueueDemo() 创建一个空的队列
        # enqueue(item) 往队列中添加一个item元素
        # dequeue() 从队列头部删除一个元素
        # is_empty() 判断一个队列是否为空
        # size() 返回队列的大小
        q = QueueDemo()
        q.enqueue('1')
        q.enqueue('2')
        q.enqueue('3')
        print(q.size())  # 3
        print(q.dequeue())  # 1
        print(q.dequeue())  # 2
        print(q.dequeue())  # 3

    def _test_deque(self):
        """
        qd = QueueDemo()
        qd._test_deque()
        """
        # QueueDemo() 创建一个空的双端队列
        # add_front(item) 从队头加入一个item元素
        # add_rear(item) 从队尾加入一个item元素
        # remove_front() 从队头删除一个item元素
        # remove_rear() 从队尾删除一个item元素
        # is_empty() 判断双端队列是否为空
        # size() 返回队列的大小
        q = QueueDemo()
        q.add_front('1')
        q.add_front('2')
        q.add_front('3')
        q.add_rear('4')
        q.add_rear('5')
        q.add_rear('6')  # 3 2 1 4 5 6
        print(q.size())  # 3
        print(q.remove_front())  # 3
        print(q.remove_front())  # 2
        print(q.remove_front())  # 1
        print(q.remove_rear())  # 6
        print(q.remove_rear())  # 5
        print(q.remove_rear())  # 4


if __name__ == '__main__':
    qd = QueueDemo()
    qd._test_deque()
